package com.googlecode.mhtetris.music
{
	import flash.events.Event;
	import flash.media.Sound;
	import flash.media.SoundChannel;
	import flash.media.SoundTransform;
	import flash.net.URLRequest;

	/**
	 * permet la lecture d'une musique pendant la partie
	 */
	public class MusicPlayer
	{
		
		/** URL du mp3 */
		private var _urlMp3:String = "";
		
		/** son que l'on manipule */
		private var son:Sound;
		
		/** piste audio à controle */
		private var piste:SoundChannel;
		
		private var _boucle:Boolean = true;
		
		private var _volumePlayer:Number = 1;
		
		
		/* --- constructeurs ------------------------------------------------------------ */
		
		
		public function MusicPlayer()
		{
			
		}

		/* --- getters and setters ------------------------------------------------------ */
			
		public function get volumePlayer():Number
		{
			return _volumePlayer;
		}

		public function set volumePlayer(value:Number):void
		{
			_volumePlayer = value;
		}

		/** indique si la chanson est jouée en boucle */
		public function get boucle():Boolean
		{
			return _boucle;
		}

		/**
		 * @private
		 */
		public function set boucle(value:Boolean):void
		{
			_boucle = value;
		}

		public function get urlMp3():String
		{
			return _urlMp3;
		}

		public function set urlMp3(value:String):void
		{
			_urlMp3 = value;
		}
		
		/* --- méthodes ------------------------------------------------------------------ */
		
		
		public function load():void {
			son = new Sound();
			var adresseMusique:URLRequest = new URLRequest(_urlMp3);
			son.load(adresseMusique);			
		}
		
		/**
		 * on rejoue la chanson si on est en boucle lorsqu'elle est terminée
		 */
		protected function soundComplete(event:Event):void
		{
			if (_boucle) {
				play();
			}
		}
		
		public function play():void {
			piste = son.play(0);
			volume(volumePlayer);
			piste.addEventListener(Event.SOUND_COMPLETE, soundComplete);
		}

		/**
		 * affecte le son de value (qui doit être compris entre 0 et 1)
		 */
		public function volume(value:Number):void {
			//piste.soundTransform.volume = 0.1; 
			volumePlayer = value;
			piste.soundTransform = new SoundTransform(volumePlayer); 
		}

	}
}